# HG changeset patch # User alexrayne # Date 1726176902 -10800 # Fri Sep 13 00:35:02 2024 +0300 # Node ID a000ac71e41a56e3b1c7697f44e34683d0fd47bd # Parent 3785814bc2b75c7785b6bf1a26f96ef5848b09dd subrepo: hgsuberpo use local filesytem subrepo on push/pull when no source provided. * when hgsub not provides source (a kind of mistake), occasionaly was used parent repo on push/pull. This leads on accasinaly trash full subrepo contents into root-repo on push. now for such issue use local subrepo path, instead of parent repo. diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -482,6 +482,10 @@ # internal config: ui._usedassubrepo self.ui.setconfig(b'ui', b'_usedassubrepo', b'True', b'subrepo') self._initrepo(r, state[0], create) + # provide relpath for subrepos + # this case push/pull try into local repo when no repo-source provided. + self._repo._relpath = self._relpath; + @annotatesubrepoerror def addwebdirpath(self, serverpath, webconf): diff --git a/mercurial/subrepoutil.py b/mercurial/subrepoutil.py --- a/mercurial/subrepoutil.py +++ b/mercurial/subrepoutil.py @@ -456,7 +456,12 @@ """return pull/push path of repo - either based on parent repo .hgsub info or on the top repo config. Abort or return None if no source found.""" if hasattr(repo, '_subparent'): - source = urlutil.url(repo._subsource) + source = repo._subsource + if not source: + if hasattr(repo, '_relpath'): + if urlutil.url(repo.root).islocal: + source = repo._relpath + source = urlutil.url(source) if source.isabs(): return bytes(source) source.path = posixpath.normpath(source.path) _______________________________________________ Mercurial-devel mailing list Mercurial-devel@lists.mercurial-scm.org https://lists.mercurial-scm.org/mailman/listinfo/mercurial-devel